Scroll to navigation

SET_TID_ADDRESS(2) Руководство программиста Linux SET_TID_ADDRESS(2)

ИМЯ

set_tid_address - устанавливает указатель идентификатора нити

ОБЗОР

#include <linux/unistd.h>

long set_tid_address(int *tidptr);

ОПИСАНИЕ

В ядре для каждого процесса хранятся два значения: set_child_tid и clear_child_tid, которые по умолчанию равны NULL.

set_child_tid

Если процесс запущен с помощью clone(2) с флагом CLONE_CHILD_SETTID, то значение set_child_tid устанавливается равным child_tidptr, пятому аргументу системного вызова clone(2).

Если set_child_tid присвоено значение, то самое первое действие, которое выполняется для нового процесса, это запись его PID по этому адресу.

clear_child_tid

Если процесс запущен с помощью clone(2) с флагом CLONE_CHILD_CLEARTID, то значение clear_child_tid устанавливается равным child_tidptr, пятому аргументу системного вызова clone(2).

Системный вызов set_tid_address() устанавливает у вызывающего процесса значение clear_child_tid равным tidptr.

Если clear_child_tid присвоено значение, то при завершении работы процесса (и если он использовал общую с другими процессами или нитями память) по этому адресу записывается 0 и выполняется вызов futex(child_tidptr, FUTEX_WAKE, 1, NULL, NULL, 0); (то есть, пробуждается один процесс, ожидающий этот futex). Ошибки игнорируются.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Вызов set_tid_address() всегда возвращает PID вызывающего процесса.

ОШИБКИ

Вызов set_tid_address() всегда завершается без ошибок.

ВЕРСИИ

Данный вызов появился в Linux 2.5.48. Представленное здесь описание соответствует вызову, начиная с Linux 2.5.49.

СООТВЕТСТВИЕ СТАНДАРТАМ

Данный вызов есть только в Linux.

СМОТРИТЕ ТАКЖЕ

clone(2), futex(2)

2004-09-10 Linux